package cn.itcast.nems.studentrecord.dto.change;

import cn.itcast.nems.studentrecord.constant.ReferenceTypeEnum;
import cn.itcast.nems.studentrecord.enumeration.StudentRecordSourceEnum;
import cn.itcast.nems.studentrecord.enumeration.StudentRecordStateEnum;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 创建学籍数据对象
 *
 * @author liyong
 * create: 2023-11-15 16:02:06
 **/
@Data
public class StudentRecordCreateDTO {
    /**
     * 学籍来源
     */
    private StudentRecordSourceEnum source;

    /**
     * 参考单据类型
     */
    private ReferenceTypeEnum referenceType;

    /**
     * 参考单据ID
     */
    private String referenceId;

    /**
     * 参考单据行ID
     */
    private String referenceLineId;

    /**
     * 学员ID
     */
    private int studentId;

    /**
     * 班级ID
     */
    private Integer clazzId;

    /**
     * 班级名
     */
    private String clazzName;

    /**
     * 班级原始价格
     */
    private Integer price;

    /**
     * 应付金额;应付金额=原金额-优惠金额。所有阶段应付金额的合计！单位：分
     */
    private Integer amountDue;

    /**
     * 实际应付金额;应付金额-调整金额，但可根据实际业务情况调整。如，基于现有业务规则同学科转班就算有差价也无需补差价，此时该金额就等于上一个学籍结余的金额
     */
    private Integer actualAmountDue;

    /**
     * 调整金额;有调价单金额累加
     */
    private Integer adjustmentAmount = 0;

    /**
     * 已支付金额
     */
    private Integer paidAmount = 0;

    /**
     * 转班转入金额;注：来自转班凭单，由其他学籍转进来金额。
     */
    private Integer transferFromAmount;

    /**
     * 退费金额;注：转班走也需记录该金额
     */
    private Integer refundAmount;

    /**
     * 进班日期;新报名取开班日期，转班、升级取凭单上的日期
     */
    private LocalDateTime inDate;

    /**
     * 关联学籍ID;记录该学籍来源的上一个学籍ID。比如升班时记录基础班学籍ID，转班时记录转班来源的学籍ID等
     */
    private String associatedRecordId;

    /**
     * 订单ID，同学科转班没有订单
     */
    private String orderId;

    /**
     * 学籍备注
     */
    private String remark;

    /**
     * 优惠总金额
     */
    private Integer discountAmount;

    /**
     * 优惠信息
     */
    private List<StudentRecordChangeDiscountDTO> discounts;

    /**
     * 必须新建学籍，如果学籍已经存在将出现异常（根据班级ID及学员ID）
     */
    private boolean requiredNew = true;

    /**
     * 学籍状态
     */
    private StudentRecordStateEnum state = StudentRecordStateEnum.PENDING;

    /**
     * 老EMS studentjoinclass 主键，不能支持多阶段情况
     */
    private Integer joinClassId;
}
